package com.entrogy.service;

import com.alibaba.fastjson.JSONObject;
import com.entrogy.bean.ClassEntity;
import com.entrogy.bean.ClassTypeEntity;
import com.entrogy.bean.GradeEntity;
import com.entrogy.bean.StaticCycleEntity;

import java.util.List;
import java.util.Map;

public interface ClassService {
	/**
	 * 班级名称
	 * @param className
	 * @return
	 */
	int insertGrade(int id,String className,Integer parentId,int schoolCode);

	/**
	 * 为老师分配班级 多对多关系
	 * @param userId
	 * @param classId
	 * @return
	 */
	int insertUserAndClass(int userId, int classId);

	/**
	 *获取所有班级的信息列表
	 * @return
	 */
	List<ClassEntity> getClassList(Map<String,Object>  map);

	/**
	 * 根据ID删除班级或年级
	 * @param id
	 * @param schoolCode
	 * @return
	 */
	int deleteClass(int id, Integer schoolCode);

	/**
	 * 新增班级类型
	 * @param typeName
	 * @return
	 */
	int insertClassType(String typeName,int schoolCode);

	/**
	 * 获取班级类型列表
	 * @return
	 */
	List<ClassTypeEntity> getClassTypeList(int schoolCode);

	/**
	 * 设置班级的类型
	 * @param classId
	 * @param classTypeId
	 * @param schoolCode
	 * @return
	 */
	int updateClassInformation(int classId, int classTypeId, String className, Integer schoolCode);

	/**
	 * 删除班级类型
	 * @param id
	 * @return
	 */
	int deleteClassType(int id);

	/**
	 *   根据id 查询class
	 * @param id
	 * @return
	 */
	ClassEntity getClassById(int id,int schoolCode);

	/**
	 *   查询总数
	 * @param map
	 *
	 * @return
	 */
	int getClassListTotal(Map<String,Object>  map);

	/**
	 * 根据班主任id查询所教班级信息
	 * @param uid
	 * @return
	 */
    ClassEntity getClassByClassLeaderId(String uid);

	/**
	 * 根据年级主任查询年级信息，年级内包含班级
	 * @param uid
	 * @return
	 */
	GradeEntity getGradeByGradeLeaderId(String uid);

	/**
	 * 根据学校id查询该校的所有年级id
	 * @param schoolCode
	 * @return
	 */
    List<Integer> listGradeIdBySchoolCode(Integer schoolCode);

	/**
	 * 查询班主任所带的班级id
	 * @param teacherId
	 * @return
	 */
	List<Integer> listClassLeaderManagementClassId(String teacherId);

	/**
	 * 查询年级主任所带的班级id
	 * @param teacherId
	 * @return
	 */
	List<Integer> listGradeLeaderManagementClassId(String teacherId);

	/**
	 * 通过班级id查询年级id
	 * @param classId
	 * @param schoolCode
	 * @return
	 */
	int getGradeIdByClassId(int classId, Integer schoolCode);

	/**
	 * 查询该班级是否有班主任
	 * @param schoolCode
	 * @param gradeId
	 * @param classId
	 * @return
	 */
    String getClassLeader(int schoolCode, String gradeId, String classId);

    StaticCycleEntity getStaticCycle(int gradeId, Integer schoolCode, String allowTime);

	/**
	 * 查询年级组长id
	 * @param schoolCode
	 * @param gradeId
	 * @return
	 */
    String getGradeLeaderId(Integer schoolCode, Integer gradeId);

	/**
	 * 查询学校的所有班级id
	 * @param schoolCode
	 * @param gradeId
	 * @return
	 */
	List<Integer> listClassIdBySchoolCode(Integer schoolCode, Integer gradeId);

	/**
	 * 查询该学校该时段的最早考勤时间和最晚考勤时间
	 * @param schoolCode
	 * @param dynArrangeTableName
	 * @return
	 */
	List<JSONObject> listAttendanceTime(Integer schoolCode, String dynArrangeTableName);
}
